經歷了暴風重寫之後的感想
計算的時候如果沒有轉換成 SVG 座標系統,SVG移動的位置計算就會以瀏覽器的為主,如果有置中或是padding一定就會偏移,
而且XY軸的方向跟以前數學課上的不一樣,所以在調整位置的時候也容易造成一些疑惑
以下是轉換的程式碼
private getSVGPoint(event: PointerEvent): DOMPoint {
const pt = this.svg.createSVGPoint();
pt.x = event.clientX;
pt.y = event.clientY;
return pt.matrixTransform(this.svg.getScreenCTM()!.inverse());
}
也問了claude瀏覽器座標跟SVG座標的差異,
以下是他給出的回答,實際測試後確實也證實是這個問題
附上體驗位置 瀏覽器座標 vs SVG 座標演示
event.clientX
和 event.clientY
獲得viewBox
屬性修改。viewBox
和 SVG 元素的尺寸決定。viewBox
進行縮放和平移